package com.carefree.system.modules.admin.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.carefree.system.modules.admin.entity.MenuEntity;
import com.carefree.system.modules.admin.vo.AssginMenuVo;
import com.carefree.system.modules.admin.vo.RouterVo;

import java.util.List;

/**
 * 菜单
 *
 * @author tengbin
 */
public interface MenuService extends IService<MenuEntity> {

    /**
     * 获取菜单列表
     *
     * @return
     */
    List<MenuEntity> getMenusWithTree();

    /**
     * 启用或禁用
     *
     * @param id     菜单id
     * @param status 状态
     * @return
     */
    boolean activeOrInActiveById(Long id, Integer status);

    /**
     * 根据菜单id删除菜单
     *
     * @param menuId
     * @return
     */
    boolean removeMenuById(Long menuId);

    /**
     * 查询 type (类型) 不是 2(按钮)的菜单信息
     *
     * @return
     */
    List<MenuEntity> queryNotButtonTypeMenuList();

    /**
     * 根据角色id获取菜单信息
     *
     * @param roleId 角色id
     * @return
     */
    List<MenuEntity> queryMenusByRoleIdToAssign(Long roleId);

    /**
     * 根据角色id分配菜单
     *
     * @param assginMenuVo
     * @return
     */
    boolean assignMenuForRole(AssginMenuVo assginMenuVo);

    /**
     * 根据用户id查询该用户所拥有的所有菜单信息
     *
     * @param userId 用户id
     * @return
     */
    List<RouterVo> getMenusByUserId(Long userId);

    /**
     * 根据用户id查询拥有的按钮权限列表
     *
     * @param userId
     * @return
     */
    List<String> getMenuButtonsByUserId(Long userId);

    /**
     * 保存
     *
     * @param menu
     * @return
     */
    boolean saveMenu(MenuEntity menu);

    /**
     * 修改
     *
     * @param menu
     * @return
     */
    boolean updateMenuById(MenuEntity menu);
}

